import taskService from '../service/task';
import {Message} from 'element-ui';
//并不是需要把所有的状态都在仓库中
//如果此状态只在此组件中使用，别的组件不需要访问、修改，那就就把此状态定义组件内就可以
//如果此状态需要缓存，或者说跨组件使用，就可以定义在仓库中
const state = {
    tasks: [],//总的任务列表
    filter:'all',//过滤器
    isLoading:false//是否正在加载中....
}
const getters = {
    filteredTasks:({tasks,filter})=>{//获取根据过滤器过滤后的任务列表
        return tasks.filter(task=>filter === 'all'|| task.status===filter);
    }
}

const actions = {
    //获取所有的任务数据
    async retrieveTasks({commit}){
        commit('setLoading',true);//在获取数据前把loading状态调为true
        try{
            //调用接口服务获取最新的任务列表
            const tasks = await taskService.getTasks();
            //const tasks = await this._vm.$service.task.getTasks();
            //把任务列表进行提交,保存到仓库中
            commit('setTasks',tasks);
            //this._vm.$message.success('任务列表获取成功');
        }catch(error){
            console.log(error)
            this._vm.$message.error('任务列表获取失败');
        }finally{
             //把loading状态重新设置为false
             commit('setLoading',false);
        }
    },
    async createTask({dispatch},{description,expected_completion_time}){
       //先调用接口添加一个新的任务
       await taskService.createTask(description,expected_completion_time);
       //再次派发一个动作，重新获取所有的最新的数据
       await dispatch('retrieveTasks');
    },
    async deleteTask({dispatch},taskId){
        try{
            //调用接口删除taskId对应的任务
            await taskService.deleteTask(taskId);
            //再次派发获取数据的动作
            await dispatch('retrieveTasks');
            //this._vm.$message.success('任务删除成功');
            Message.success('任务删除成功');
        }catch(error){
            console.log(error)
            //this._vm.$message.error('任务删除失败');
            Message.error('任务删除失败');
        }
    },
    async completeTask({dispatch},taskId){
        try{
            //调用接口完成taskId对应的的任务
            await taskService.updateTask(taskId);
            await dispatch('retrieveTasks');
            Message.success('完成任务成功');
        }catch(error){
            console.log(error);
            Message.error('完成任务失败');
        }
    }
}

const mutations = {
    //设置加载状态 state指的是老状态 isLoading 是传递给mutation的参数
    setLoading(state,isLoading){
        state.isLoading=isLoading;
    },
    setTasks(state,tasks){
        state.tasks = tasks;
    },
    setFilter(state,filter){
        state.filter = filter;
    }
}
export default {
    namespaced:true,//启动命名空间
    state,          //定义此模块的状态
    getters,        //定义访问器
    actions,        //定义动作
    mutations       //定义突变
}